package com.example.remotecontrol.data.model

import java.util.UUID

/**
 * 场景数据模型类
 * 表示一组自动化控制指令的集合
 */
data class Scene(
    val id: String = UUID.randomUUID().toString(),
    val name: String,                      // 场景名称
    val description: String = "",          // 场景描述
    val actions: List<Action>,             // 场景包含的动作列表
    val iconRes: Int? = null,              // 场景图标资源ID
    val isFavorite: Boolean = false,       // 是否为收藏场景
    val roomFilter: String? = null,        // 房间过滤器，仅针对特定房间的设备
    val scheduleEnabled: Boolean = false,  // 是否启用自动执行
    val scheduleTime: String? = null,      // 自动执行的时间，格式为"HH:mm"
    val scheduleDays: List<Int> = emptyList() // 自动执行的星期几，1-7表示周一到周日
) {
    /**
     * 场景动作类
     * 表示针对特定设备执行的单个控制命令
     */
    data class Action(
        val deviceId: String,              // 设备ID
        val command: String,               // 命令名称
        val parameters: Map<String, Any> = emptyMap(), // 命令参数
        val delayAfter: Int = 0            // 执行后的延迟（毫秒）
    )
    
    /**
     * 检查场景是否包含特定设备
     */
    fun containsDevice(deviceId: String): Boolean {
        return actions.any { it.deviceId == deviceId }
    }
    
    /**
     * 获取场景中所有唯一设备的ID列表
     */
    fun getDeviceIds(): List<String> {
        return actions.map { it.deviceId }.distinct()
    }
    
    /**
     * 获取特定设备在场景中的动作列表
     */
    fun getActionsForDevice(deviceId: String): List<Action> {
        return actions.filter { it.deviceId == deviceId }
    }
    
    /**
     * 计算场景执行的总时间（包括延迟）
     * @return 总执行时间（毫秒）
     */
    fun getTotalExecutionTime(): Int {
        return actions.sumOf { it.delayAfter }
    }
    
    /**
     * 检查场景是否在特定日期可以执行
     * @param dayOfWeek 星期几（1-7，表示周一到周日）
     */
    fun isScheduledForDay(dayOfWeek: Int): Boolean {
        return scheduleEnabled && scheduleDays.contains(dayOfWeek)
    }
    
    /**
     * 检查场景是否为空（不包含任何动作）
     */
    fun isEmpty(): Boolean {
        return actions.isEmpty()
    }
} 